package com.example.myapplication9;

import java.text.DecimalFormat;

public class Hashtable {
static LinearNode<Integer>[] num;
////
    public Hashtable(){
     num= new LinearNode[11];
    }//这是构造函数

    int time=0;//表示冲突次数
    static int time1=0;//表示总的搜索次数
    int ab=0;//表示哈希表中元素的总数
    public  void add(Integer number){
       Integer a;
              a = number%11;
              if (num[a]==null)
              {
                  LinearNode<Integer> current=new LinearNode<Integer>(number);
                  num [a]=current;
              ab++;
              }//这个条件语句表示的是当插入索引为位置元素为空时直接将数字差入链表头结点
        else
              {
                  LinearNode current=num[a];
                  while (!current.getElement().equals(number)) {
                      if (current.getNext()==null)
                      {
                          LinearNode node=new LinearNode(number);
                          current.setNext(node);
                          ab++;
                          time++;//这个循环处理的是冲突问题，所以用表示冲突的变量在这里几录。
                          break;
                      }//如果这个节点是链表的尾节点，那么将新元素插入链表尾部。

                      current=current.getNext();
                      ab++;
                      time++;
                      }//while循环表示的是当节点中的元素不等于加入的元素时循环继续进行。
            }
    }//这是向哈希表里添加元素的方法
    public void add(Integer []num){
        for(int a=0;a<num.length;a++)
        {
            add(num[a]);
        }
    }
    public  static boolean Hashsearch(Integer num1){
        Integer a=num1%11;
        if(num[a]==null)
        {
        time1++;
        return false;
        }
        else
        {
            LinearNode current=num[a];
            while (current.getNext()!=null&&!current.getElement().equals(num1))
        {
            current=current.getNext();
            time1++;
        }
        if (current.getElement().equals(num1))
            {
                time1++;
                return true;
            }
            else{
            time1++;
            return false;
        }
        }
        }//这是进行哈希查找的方法。


    public void sum(LinearNode num2[])
    {
        int c=0;
        int b=0;
        int[]num1=new int[6];
        for(int a=0;a<num.length;a++)
        {
            if (num2[a]!=null)
            {
                num1[c]=a;
                c++;
            }
            }
            for(int a=0;a<num1.length;a++)
          {
              LinearNode<Integer> current =num2[num1[a]];
             while(current.getNext()!=null)
             {
                 Hashsearch(current.getElement());
                 current=current.getNext();
             }
             Hashsearch(current.getElement());//在这里我调用了哈希查找的方法。
          }
        String result = "";
        float add =(float)time1/ab;
        DecimalFormat df = new DecimalFormat("0.00");
        result = df.format(add);
        System.out.println("ASL为"+result+"冲突次数"+time);
    }



}

